package com.wangyadong.hobby.front.model.add;

public class Add {
    public static void main(String[] args) {
        System.out.println(Boolean.valueOf("true"));
        System.out.println(Boolean.valueOf("false"));
        testGetAdd(1, -3);
    }

    public static void testGetAdd(int a, int b) {
        while (b != 0) {
            // 1.这一步是通过'异或运算'计算每一位相加后的值，不算进位。a^b
            int t = a ^ b;
            //2.得到进位 a&b<<1
            b = (a & b) << 1;
            a = t;
        }
        System.out.println("======================" + a);
    }


    /**
     * 1.这一步是通过'异或运算'计算每一位相加后的值，不算进位。a^b
     * 101^111 即:
     * 101
     * 111
     * ----
     * 010
     * *******************
     * 2.得到进位 a&b<<1
     * 101&111 即:
     * 101
     * 111
     * ---
     * 101
     * 计算出结果是对应位相加后需要进位到高位的值，需要左移动一位，以便加到高位上去
     * 101<<1 = 1010
     * ********************
     * 3.然后把两个数字再加一起就是'和'，但是相加过程还会有进位，于是循环相加过程即第一步与第二步，直到没有进位
     * （这一步其实就是递归的思路，还是两个数字相加）
     * */


}
